// SPDX-License-Identifier: GPL-2.0-only
/*
 * Copyright (C) 2018 Logic PD, Inc - https://www.logicpd.com/
 */

#include <dt-bindings/input/input.h>

/ {
	codec1 {
		compatible = "simple-audio-card";
		simple-audio-card,name = "tlv320aic23-hifi";

		simple-audio-card,widgets =
			"Microphone", "Mic In",
			"Line", "Line In",
			"Line", "Line Out";

		simple-audio-card,routing =
			"Line Out", "LOUT",
			"Line Out", "ROUT",
			"LLINEIN", "Line In",
			"RLINEIN", "Line In",
			"MICIN", "Mic In";

		simple-audio-card,format = "i2s";
		simple-audio-card,bitclock-master = <&sound_master>;
		simple-audio-card,frame-master = <&sound_master>;

		simple-audio-card,cpu {
			sound-dai = <&mcbsp1>;
		};

		sound_master: simple-audio-card,codec {
			sound-dai = <&tlv320aic23_1>;
			system-clock-frequency = <12000000>;
		};
	};

	codec2 {
		compatible = "simple-audio-card";
		simple-audio-card,name = "tlv320aic23-hifi";

		simple-audio-card,widgets =
			"Microphone", "Mic In",
			"Line", "Line In",
			"Line", "Line Out";

		simple-audio-card,routing =
			"Line Out", "LOUT",
			"Line Out", "ROUT",
			"LLINEIN", "Line In",
			"RLINEIN", "Line In",
			"MICIN", "Mic In";

		simple-audio-card,format = "i2s";
		simple-audio-card,bitclock-master = <&sound_master2>;
		simple-audio-card,frame-master = <&sound_master2>;

		simple-audio-card,cpu {
			sound-dai = <&mcbsp2>;
		};

		sound_master2: simple-audio-card,codec {
			sound-dai = <&tlv320aic23_2>;
			system-clock-frequency = <12000000>;
		};
	};

	expander-keys {
		compatible = "gpio-keys-polled";
		poll-interval = <100>;

		record {
			label = "Record";
			/* linux,code = <BTN_0>; */
			gpios = <&tca6416_2 15 GPIO_ACTIVE_LOW>;
		};

		play {
			label = "Play";
			linux,code = <KEY_PLAY>;
			gpios = <&tca6416_2 14 GPIO_ACTIVE_LOW>;
		};

		Stop {
			label = "Stop";
			linux,code = <KEY_STOP>;
			gpios = <&tca6416_2 13 GPIO_ACTIVE_LOW>;
		};

		fwd {
			label = "FWD";
			linux,code = <KEY_FASTFORWARD>;
			gpios = <&tca6416_2 12 GPIO_ACTIVE_LOW>;
		};

		rwd {
			label = "RWD";
			linux,code = <KEY_REWIND>;
			gpios = <&tca6416_2 11 GPIO_ACTIVE_LOW>;
		};

		shift {
			label = "Shift";
			linux,code = <KEY_LEFTSHIFT>;
			gpios = <&tca6416_2 10 GPIO_ACTIVE_LOW>;
		};

		Mode {
			label = "Mode";
			linux,code = <BTN_MODE>;
			gpios = <&tca6416_2 9 GPIO_ACTIVE_LOW>;
		};

		Menu {
			label = "Menu";
			linux,code = <KEY_MENU>;
			gpios = <&tca6416_2 8 GPIO_ACTIVE_LOW>;
		};

		Up {
			label = "Up";
			linux,code = <KEY_UP>;
			gpios = <&tca6416_2 7 GPIO_ACTIVE_LOW>;
		};

		Down {
			label = "Down";
			linux,code = <KEY_DOWN>;
			gpios = <&tca6416_2 6 GPIO_ACTIVE_LOW>;
		};
	};
};

&i2c2 {
	/* Audio codecs */
	tlv320aic23_1: codec@1a {
		compatible = "ti,tlv320aic23";
		reg = <0x1a>;
		#sound-dai-cells= <0>;
		status = "okay";
	};

	tlv320aic23_2: codec@1b {
		compatible = "ti,tlv320aic23";
		reg = <0x1b>;
		#sound-dai-cells= <0>;
		status = "okay";
	};
};

&i2c3 {
	/* Audio codecs */
	tlv320aic23_3: codec@1a {
		compatible = "ti,tlv320aic23";
		reg = <0x1a>;
		#sound-dai-cells= <0>;
		status = "okay";
	};

	/* GPIO Expanders */
	tca6416_2: gpio@20 {
		compatible = "ti,tca6416";
		reg = <0x20>;
		gpio-controller;
		#gpio-cells = <2>;
		vcc-supply = <&vdd_io_reg>;
	};

	tca6416_3: gpio@21 {
		compatible = "ti,tca6416";
		reg = <0x21>;
		gpio-controller;
		#gpio-cells = <2>;
		vcc-supply = <&vdd_io_reg>;
	};

	/* TVP5146 Analog Video decoder input */
	tvp5146@5c {
		compatible = "ti,tvp5146m2";
		reg = <0x5c>;
	};
};

&mcbsp1 {
	status = "ok";
	#sound-dai-cells = <0>;
	pinctrl-names = "default";
	pinctrl-0 = <&mcbsp1_pins>;
};

&mcbsp2 {
	status = "ok";
	#sound-dai-cells = <0>;
	pinctrl-names = "default";
	pinctrl-0 = <&mcbsp2_pins>;
};

&omap3_pmx_core {
	mcbsp1_pins: pinmux_mcbsp1_pins {
		pinctrl-single,pins = <
			OMAP3_CORE1_IOPAD(0x2190, PIN_OUTPUT | MUX_MODE0)	/* mcbsp1_dx.mcbsp1_dx */
			OMAP3_CORE1_IOPAD(0x2192, PIN_INPUT | MUX_MODE0)	/* mcbsp1_dx.mcbsp1_dr */
			OMAP3_CORE1_IOPAD(0x2196, PIN_INPUT | MUX_MODE0)	/* mcbsp_clks.mcbsp1_fsx */
			OMAP3_CORE1_IOPAD(0x2198, PIN_INPUT | MUX_MODE0)	/* mcbsp1_clkx.mcbsp1_clkx */
		>;
	};

	mcbsp2_pins: pinmux_mcbsp2_pins {
		pinctrl-single,pins = <
			OMAP3_CORE1_IOPAD(0x213c, PIN_INPUT | MUX_MODE0)	/* mcbsp2_fsx.mcbsp2_fsx */
			OMAP3_CORE1_IOPAD(0x213e, PIN_INPUT | MUX_MODE0)	/* mcbsp2_clkx.mcbsp2_clkx */
			OMAP3_CORE1_IOPAD(0x2140, PIN_INPUT | MUX_MODE0)	/* mcbsp2_dr.mcbsp2.dr */
			OMAP3_CORE1_IOPAD(0x2142, PIN_OUTPUT | MUX_MODE0)	/* mcbsp2_dx.mcbsp2_dx */
		>;
	};
};
